#include <iostream>

class Test   // 内存对齐
{
public:
  Test():a(1),b(2){}
  virtual void show()   // 函数不占内存   虚函数占 且虚指针内存在第一个   
  {
    std::cout<<"hello"<<std::endl;
  }
public:
  int a;
  char b;
//   const int c;   // c的内存在类里面 
//   static int d;    // 静态变量的内存不在内存中
};
 
// int Test::d = 0;

class Derived : public Test
{
public:
   int c;
};

int main()
{
    // Test t;
    // printf("%p %p %p\n",&t,&t.a,&t.b);
    // int *p = (int*)&t.c;
    // *p = 20;
    // std::cout<<t.c<<std::endl;  // c的内存在类里面 

    // *((int*)(&t)) = 2;  // a的值改为2
    // *((char*)(&t+4)) = 'a'; 

    // std::cout<<sizeof(Test)<<std::endl;
    // std::cout<<t.a<<std::endl;

    Derived t;
    printf("%p %p %p %p\n",&t,&t.a,&t.b,&t.c);  // 先放父类，再放子类 
    std::cout<<sizeof(t)<<std::endl;

    return 0;
}

// vitual 每多一个，就多一个虚指针 先放基类 再放子类；   如果只有父类中定义虚函数 存放的是子类的虚指针
